package com.avengers.mobile.layer.rest;
import java.lang.reflect.Type;

import java.util.Date;
import java.util.List;

import javax.ws.rs.Consumes;


import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Repository;

import com.avengers.mobile.layer.bean.PedidoBean;
import com.avengers.mobile.layer.bean.PedidoDetalleBean;

import com.avengers.mobile.layer.model.Pedido;
import com.avengers.mobile.layer.model.PedidoDetalle;


import com.avengers.mobile.layer.service.PedidoService;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;




@Repository("restPedido")
@Path("/orders")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class PedidoRest {

	static final Log log = LogFactory.getLog(PedidoRest.class);
	
	@Autowired
	PedidoService  pedidoService;
	
	@Autowired
	Pedido pedido;
	
	@Autowired
	PedidoBean pedidoBean;
	
		
	
	@Autowired
	PedidoDetalleBean pedidoDetalleBean;
	
	@Autowired
	PedidoDetalle detalle;
	

	
	Gson gson = new Gson();	
	
	
	@PUT	
	@Path("/{order}/{oderDetail}")	
	@Produces(MediaType.APPLICATION_JSON)
	public Response Order(@PathParam("order") String order,@PathParam("oderDetail") String orderDetail) throws Exception {					
		
	   pedido = new Pedido();		
	   pedidoBean=new PedidoBean();		
	   pedidoDetalleBean=new PedidoDetalleBean();
	   	   		
	   pedidoBean=gson.fromJson(order, PedidoBean.class);
		
		pedido.setCliente(pedidoBean.getCliente());
		pedido.setUsuario(pedidoBean.getUsuario());
		pedido.setFecPedido(new Date());
		pedido.setEstado(0);
		pedido.setComentario("Solicitado");
		
		int idPedido=pedidoService.save(pedido);
			
		
		 Type listOfTestObject = new TypeToken<List<PedidoDetalleBean>>(){}.getType();			   
		 List<PedidoDetalleBean> list=gson.fromJson("["+orderDetail+"]",listOfTestObject);
		  
		 
		  for (PedidoDetalleBean pedidoDetalleBean : list) {			  
		
			  detalle.setProducto(pedidoDetalleBean.getProducto());			  
			  detalle.setPedido(idPedido);
			  detalle.setCantPedido(pedidoDetalleBean.getCantPedido());			 
			  
			  pedidoService.saveDetalle(detalle);
		  }
		
	
		return Response.ok().build();		
	}

	
	@GET	
	@Path("/{idUser}")	
	@Produces(MediaType.APPLICATION_JSON)
	public Response findPedidosList(@PathParam("idUser") String user) throws Exception{ 
		Object[] params = new Object[1];
		params[0] =user;
		return Response.ok(gson.toJson(pedidoService.findPedidoList(params))).build();		
	}
	
	@GET	
	@Path("/detalle/{idPedido}")	
	@Produces(MediaType.APPLICATION_JSON)
	public Response findPedidosDetalleList(@PathParam("idPedido") String pedido) throws Exception{ 
		Object[] params = new Object[1];
		params[0] =pedido;
		return Response.ok(gson.toJson(pedidoService.findPedidoDetalleList(params))).build();		
	}
	
   }



